home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / clipper / nannws13.zip / CLIPMEMA.ASM < prev    next >
Assembly Source File  |  1987-02-24  |  4KB  |  162 lines

  1. ; CLIPMEMA.ASM   Functions for CLIPMEM, Nantucket News, Winter 1987
  2. ; Author:  D. Morgan
  3. ; Date  :  February, 1987
  4.  
  5. PUBLIC    DOS_SIZ
  6. PUBLIC    EM_AMT
  7. PUBLIC    MEM_AMT
  8. EXTRN    _PARNI:FAR
  9. EXTRN    _RETNI:FAR
  10. PRO_NAM    SEGMENT
  11.     ASSUME    CS:PRO_NAM
  12.  
  13. ; DOS_SIZ() function for Clipper CLIPMEM program
  14. ;        to return size of DOS
  15. ;
  16. ; Syntax:    DOS_SIZ()
  17. ; Returns:    <expN> representing address in memory where
  18. ;        calling Clipper program begins (Program Segment
  19. ;        Prefix address). Expressed in paragraphs. Mul-
  20. ;        tiply by 16 to express in bytes instead; then
  21. ;        divide by 1024 if you want K.
  22. ;
  23. ; Notes:    requires DOS 3.x or greater.
  24. ;        CLIPMEM implicitly assumes where your program
  25. ;        begins is where DOS ends. If you've loaded
  26. ;        memory resident programs before running your
  27. ;        program this may not be strictly true.
  28. ;        See Programmer's Guide to the IBM PC, P. Norton,
  29. ;         Microsoft Press, p. 324
  30. ;        and Advanced MS-DOS, R. Duncan, Microsoft Press,
  31. ;         pp. 21,384
  32. ;
  33. DOS_SIZ    PROC    FAR    
  34.     PUSH    BP    ;STANDARD SAVES ETC.
  35.     MOV    BP,SP
  36.     PUSH    DS
  37.     PUSH    ES
  38.     PUSH    BX
  39.  
  40.            MOV    AH,62H    ;GET PROGRAM SEGMENT PREFIX ADDRESS
  41.     INT    21H    ;
  42.             ;LEAVES SEGMENT ADDRESS OF THIS PROCESS
  43.             ; (JUST ABOVE DOS) IN BX
  44.     MOV    AX,BX    ;SEND IT BACK TO CLIPPER
  45.  
  46.     POP    BX
  47.     POP    ES    ;STANDARD RESTORES BEFORE CALLING _RETs
  48.     POP    DS
  49.     POP    BP
  50.     PUSH    AX
  51.     CALL    _RETNI
  52.     ADD    SP,2
  53.      RET
  54. DOS_SIZ    ENDP
  55.  
  56.  
  57. ; EM_AMT() function for Clipper CLIPMEM program
  58. ;       to return whether and how much Expanded Memory
  59. ;
  60. ; Syntax:    EM_AMT() 
  61. ; Returns:    <expN>
  62. ;        0 if no EMM (Expanded Memory Manager)
  63. ;           -1 if EMM is present, but error in using it
  64. ;               n otherwise, equal to the number of pages
  65. ;          of installed Expanded Memory; 1 page=16K
  66. ;
  67. ; Notes:    See Advanced MS-DOS, R. Duncan, Microsoft
  68. ;         Press, pp. 182, 443
  69. ;        and The Lotus/Intel/Microsoft Expanded Memory
  70. ;         Specification, pp. 2-7, 3-1, 3-7
  71. ;
  72. EM_AMT    PROC    FAR    
  73.     PUSH    BP    ;STANDARD SAVES ETC.
  74.     MOV    BP,SP
  75.     PUSH    DS
  76.     PUSH    ES
  77.  
  78.     PUSH    BX
  79.     PUSH    CX
  80.     PUSH    DI
  81.     PUSH    SI
  82.  
  83.     MOV    AH,35H    ;GET INTERRUPT VECTOR
  84.     MOV    AL,67H    ; FOR THE EMM SERVICE ROUTINES (67H)
  85.     INT    21H
  86.  
  87.     MOV    DI,000AH     ;POINT TO WHERE THE ROUTINES KEEP
  88.     PUSH    CS         ; THEIR MAGIC NAME "EMMXXXX0"
  89.     POP    DS
  90.     LEA    SI,EMM_NAME  ;POINT TO OUR COPY OF THE MAGIC NAME
  91.     MOV    CX,8         ;COMPARE WHOLE NAME
  92.     CLD
  93.     REPE    CMPSB        ;CHECK 'EM FOR EQUALITY
  94.     JNE    EMM_ISNT    ;IF THEY DIFFER, NO EMM OUT THERE
  95.  
  96. EMM_IS:
  97.     MOV    AH,42H        ;IF EMM OUT THERE, ASK FOR HOW
  98.     INT    67H        ; MUCH EXPANDED MEMORY THERE IS
  99.     OR    AH,AH
  100.     JNZ    ERROR1
  101.     MOV    AX,DX        ;AND SEND THE NUMBER OF 16K
  102.     JMP    CLEANUP        ; PAGES BACK TO CLIPPER
  103. ERROR1:
  104.     MOV    AX,-1
  105.     JMP    CLEANUP
  106.  
  107. EMM_ISNT:
  108.     MOV    AX,0        ;IF NO EMM, SEND CLIPPER ZERO
  109.  
  110. CLEANUP:
  111.     POP    SI
  112.     POP    DI
  113.     POP    CX
  114.     POP    BX
  115.  
  116.     POP    ES    ;STANDARD RESTORES BEFORE CALLING _RETs
  117.     POP    DS
  118.     POP    BP
  119.     PUSH    AX
  120.     CALL    _RETNI
  121.     ADD    SP,2
  122.      RET
  123. EMM_NAME    DB    "EMMXXXX0"  ;ALWAYS EMBEDDED IN EMM
  124. EM_AMT    ENDP
  125.  
  126.  
  127. ; MEM_AMT() function for Clipper CLIPMEM program
  128. ;
  129. ; Syntax:    MEM_AMT()
  130. ; Returns:    top of memory 
  131. ; Notes:    see Program Segment Prefix layout detail,
  132. ;        in DOS Technical Reference Manual 
  133. ;
  134. MEM_AMT    PROC    FAR    
  135.     PUSH    BP    ;STANDARD SAVES ETC.
  136.     MOV    BP,SP
  137.     PUSH    DS
  138.     PUSH    ES
  139.     PUSH    BX
  140.  
  141.            MOV    AH,62H    ;GET PROGRAM SEGMENT PREFIX ADDRESS
  142.     INT    21H    ;
  143.             ;LEAVES SEGMENT ADDRESS OF THIS PROCESS
  144.             ;(JUST ABOVE DOS) IN BX
  145.     MOV    DS,BX
  146.     MOV    BX,2
  147.     MOV    AX,[BX]
  148.  
  149.     POP    BX
  150.     POP    ES    ;STANDARD RESTORES BEFORE CALLING _RETs
  151.     POP    DS
  152.     POP    BP
  153.     PUSH    AX
  154.     CALL    _RETNI
  155.     ADD    SP,2
  156.      RET
  157. MEM_AMT    ENDP
  158.  
  159. PRO_NAM    ENDS
  160.     END        ;END OF ASSEMBLY
  161.